public class CarroDeCorridaQuatro implements Runnable {

	private ListaEncadeada listaEncadeada;
	private Pilha pilha;
	private ListaEncadeada[] lLista;
	private Pilha[] lPilha;
	private String[][] lArray;
	private int passos;
	private int quantidade;
	private NoLista noLista;
	private int cont = 0;

	public CarroDeCorridaQuatro() {
		this.passos = 10;
		this.quantidade = 10;
		criaArray();
		criaListas();
		criaPilhas();
	}

	@Override
	public void run() {
		double t0 = System.currentTimeMillis();

		while (cont < passos) {
			QuickSort.quick_sort(lArray[cont], 0, quantidade);
			pilha = lPilha[cont].ordenar();
			lLista[cont].ordenar();
			
			for (int i = 0; i < quantidade; i++) {
				System.out.println(lArray[cont][i]);
			}
			
			while (!pilha.isEmpty()) {
				System.out.println(pilha.pop());
			}
			
			noLista = lLista[cont].getInicio();
			while (noLista != null) {
				System.out.println(noLista.getValor());
				noLista = noLista.getNext();
			}
			
			cont++;
		}

		System.out.println("Tempo total de corrida: "
				+ (System.currentTimeMillis() - t0) + " ms");

	}

	public static void main(String[] args) {
		CarroDeCorridaQuatro carro = new CarroDeCorridaQuatro();
		carro.run();
	}

	public void criaListas() {
		lLista = new ListaEncadeada[passos];
		for (int i = 0; i < passos; i++) {
			lLista[i] = new ListaEncadeada();
			lLista[i].insert(new NoLista("wandenvelde"));
			lLista[i].insert(new NoLista("rhuan"));
			lLista[i].insert(new NoLista("tacio"));
			lLista[i].insert(new NoLista("bruno"));
			lLista[i].insert(new NoLista("alan"));
			lLista[i].insert(new NoLista("pedro"));
			lLista[i].insert(new NoLista("kelyson"));
			lLista[i].insert(new NoLista("leonardo"));
			lLista[i].insert(new NoLista("renata"));
			lLista[i].insert(new NoLista("josemario"));
		}
	}

	public void criaPilhas() {
		lPilha = new Pilha[passos];
		for (int i = 0; i < passos; i++) {
			lPilha[i] = new Pilha();
			lPilha[i].push(new NoPilha("wandenvelde"));
			lPilha[i].push(new NoPilha("rhuan"));
			lPilha[i].push(new NoPilha("tacio"));
			lPilha[i].push(new NoPilha("bruno"));
			lPilha[i].push(new NoPilha("alan"));
			lPilha[i].push(new NoPilha("pedro"));
			lPilha[i].push(new NoPilha("kelyson"));
			lPilha[i].push(new NoPilha("leonardo"));
			lPilha[i].push(new NoPilha("renata"));
			lPilha[i].push(new NoPilha("josemario"));
		}
	}
	
	public void criaArray() {
		lArray = new String[passos][quantidade];
		for (int i = 0; i < passos; i++) {
			lArray[i][0] = "wandenvelde";
			lArray[i][1] = "rhuan";
			lArray[i][2] = "tacio";
			lArray[i][3] = "bruno";
			lArray[i][4] = "alan";
			lArray[i][5] = "pedro";
			lArray[i][6] = "kelyson";
			lArray[i][7] = "leonardo";
			lArray[i][8] = "renata";
			lArray[i][9] = "josemario";
		}
	}
}
